package com.huihe.common.utils;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.net.InetAddress;

/**
 * 根据IP确定实时位置工具
 * 日志格式:
 *      [ARUT]:Address Utils
 *      [LABI]:Locate Address BY IP
 */
@Slf4j
public class AddressUtils {

    /**
     * 太平洋网络IP地址查询接口
     */
    public static final String IP_URL = "https://whois.pconline.com.cn/ipJson.jsp";

    /**
     * 根据IP获得真实地址
     * @param ip 要查询的IP
     * @return 真实地址
     */
    public static String getRealAddressByIP(String ip) {
        try{
            InetAddress address = InetAddress.getByName(ip);
            //判断是否是内网
            if (address.isSiteLocalAddress()) {
                return null;
            }
            //发送请求到 太平洋网络 获得真实地址
            String rspStr = HttpUtils.sendHttpGet(IP_URL, "/ip=" + ip + "&json=true", "GBK");
            if (StrUtil.isEmpty(rspStr)) {
                log.error("[ARUT][LABI] IP:{} 获取地址失败,获取的地址为空", ip);
                return null;
            }
            //rspStr需要处理才能转Json
            String[] i = rspStr.split("\\(");
            rspStr = i[2].split("\\)")[0];
            //根据请求 太平洋网络 的结果 json 去除里面的信息并拼接
            JSONObject obj = JSON.parseObject(rspStr);
            String region = obj.getString("pro");
            String city = obj.getString("city");
            return String.format("%s %s", region, city);
        }catch (Exception e){
            log.error("[ARUT][LABI] " + e.getMessage(),e);
        }
        return null;
    }
}
